package br.ufrpe.bsi.pvs.xml;

import java.net.URL;

import org.jdom2.Document;
import org.jdom2.Element;

import br.ufrpe.bsi.pvs.ResponseQueue;
import br.ufrpe.bsi.pvs.xml.response.ResponseProcess;
import br.ufrpe.bsi.pvs.xml.response.ResponseProcessFactory;

/**
 * subclasse que especifica como deve ser o processo de resposta (response)
 * e qual o arquivo que deve ser zerado apos o processamento.
 *
 */
public class ResponseParserXML extends ParserXML {

	public static final ResponseParserXML INSTANCE = new ResponseParserXML();

	private ResponseParserXML() {
	}

	@Override
	/** processa a response */
	public void process(Document doc) {
		// extrai o tipo de Response
		Element root = doc.getRootElement();
		Element response = root.getChild(XMLUtil.ELEM_RESPONSE);		
		String responseType = response.getAttribute(XMLUtil.ATTR_NAME).getValue();
		
		// pede para a fabrica de processos de response retornar
		// a instancia correta que atende ao tipo de response
		ResponseProcess processor = ResponseProcessFactory
				.getResponseProcess(responseType);

		// processa a resposta e pega o resultado
		Object result = processor.response(response);
		
		// enfileira o resultado na fila de respostas a ser lida
		// pelos assinantes da Fila de Respostas.
		// por sua vez, a fila de respostas vai avisar a seus assinantes
		// para atualizarem, ja que ha novas respostas disponiveis
		ResponseQueue.INSTANCE.queueResponse(responseType, result);		
	}
	
	@Override
	/** especifica qual arquivo deve ser zerado */
	public URL getXMLFile() {
		return getClass().getResource(XMLUtil.RESPONSE_FILE);
	}

	
}
